﻿<?php
class MY_model extends CI_Model{
	protected $_table;

	//Конструкторот го вади името на класата и го добива името на табелата
	public function __construct(){
		parent::__construct();

		if (!$this->_table)
		{
			$this->_table =	strtolower(str_replace('_model', '', get_class($this)));
		}
	}

	//Ги зема сите записи од дадена табела
	public function getAll(){
		$query = $this->db->get($this->_table);
		return $query->result();
	}

	//Враќа одредена бројка на резултати според некој услов, сортирани по одредена колона и редослед
	public function getTop($array,$name,$by){
		return $this->db->where($array)->order_by($name, $by)->get($this->_table)->result();
	}
	
	//Враќа одредена бројка на резултати, според некој услов
	public function getWhere($array){
		return $this->db->where($array)->get($this->_table)->result();
	}
	
	//Враќа еден ред од дадена табела за некој услов
	public function getBy($array){
		return $this->db->where($array)->get($this->_table)->row();
	}
	
	//Враќа зададен број на редови ($rowNum) од табела, според некој услов ($where),
	//сортирани по дадена колона ($name) и редослед ($by)
	public function getLimit($rowNum, $start, $where, $name, $by){
		return $this->db->where($where)->limit($rowNum,$start)->order_by($name, $by)->get($this->_table)->result();
	}
	
	//Враќа еден ред од join на 2 табели ($table, $where) според некој услов ($filter)
	public function joinId($table, $where, $filter){
		$this->db->join($table,$where);
		$this->db->where($filter);
	
		return $this->db->get($this->_table)->row();
	}

	//Враќа зададен број на редови ($rowNum) од 2 табели ($table, $where), според некој услов ($where),
	//сортирани по дадена колона ($name) и редослед ($by)
	public function joinPaging($table, $where, $filter, $rowNum=null, $start=null){
		$this->db->join($table,$where);
		$this->db->where($filter);
		$this->db->limit($rowNum, $start);
		
		return $this->db->get($this->_table)->result();
	}
	
	//Враќа одреден број на редови од 2 табели ($table, $where), според некој услов ($filter),
	//сортирани по дадена колона ($name) и редослед ($by)
	public function joinSort($table, $where, $filter, $name=null, $by=null){
		$this->db->join($table,$where);
		$this->db->where($filter);
		$this->db->order_by($name, $by);
	
		return $this->db->get($this->_table)->result();
	}
	
	//Го враќа бројот на редови од дадена табела според даден услов ($where) 
	public function countBy($where){
		return $this->db->from($this->_table)->where($where)->count_all_results();
	}
	
	//Го враќа вкупниот број на редови на дадена табела
	public function countAll(){
		return $this->db->count_all($this->_table);
	}
	
	//Внесува податоци ($data) во табела
	public function insert($data){

		$success = $this->db->insert($this->_table, $data);

		if ($success){
			return $this->db->insert_id();
		}else{
			return FALSE;
		}
	}
	
	//Менува податоци ($data) за ред во табела според даден услов ($where)
	public function update($where, $data){
		return $this->db->where($where)->update($this->_table, $data);
	}
	
	//Брише редови од табела според даден услов ($where)
	public function delete($where){
		return $this->db->where($where)->delete($this->_table);
	}
}